﻿#define _CRT_SECURE_NO_WARNINGS 1

//给你一个链表，删除链表的倒数第 n 个结点，并且返回链表的头结点。
//输入：head = [1, 2, 3, 4, 5], n = 2
//输出：[1, 2, 3, 5

struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
    int count = 1;
    struct ListNode* p = head;
    while (p->next)
    {
        p = p->next;
        count++;
    }
    p = head;
    if (count == 1)
        return NULL;
    int cur = count - n - 1;
    // printf("%d", cur);
    if (cur < 0)
        return head->next;
    else
    {
        while (cur > 0)
        {
            p = p->next;
            cur--;
        }
        p->next = p->next->next;
    }
    return head;

}


//给定一个长度为n的数组nums，请你找到峰值并返回其索引。数组可能包含多个峰值，在这种情况下，返回任何一个所在位置即可。
//1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于
//2.假设 nums[-1] = nums[n] =−∞
//3.对于所有有效的 i 都有 nums[i] != nums[i + 1]
//4.你可以使用O(logN)的时间复杂度实现此问题吗？



int findPeakElement(int* nums, int numsLen)
{
    int i = 0;
    if (nums[0] > nums[1])
        return 0;
    for (i = 1; i <= numsLen - 2; i++)
    {
        if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1])
            return i;
    }

    return numsLen - 1;

}



//描述
//现在有一个长度为 n 的正整数序列，其中只有一种数值出现了奇数次，其他数值均出现偶数次，请你找出那个出现奇数次的数值。
//输入描述：
//第一行：一个整数n，表示序列的长度。第二行：n个正整数ai，两个数中间以空格隔开。
//输出描述：
//一个数，即在序列中唯一出现奇数次的数值



#include <stdio.h>

int cmp(void* a, void* b)
{
    return *(int*)a - *(int*)b;
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    int arr[n];
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    if (n == 1)
        return arr[0];
    qsort(arr, n, sizeof(int), cmp);
    int count = 0;
    for (i = 0; i < n; i++)
    {
        count++;
        if (arr[i] != arr[i + 1] || i == n - 1)
        {
            if (count % 2 == 1)
            {
                printf("%d", arr[i]);
                return 0;
            }
            count = 0;
        }
    }

    return 0;
}